package com.sptpc.stu.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.List;

/**
 * 学生的实体类
  */
@Entity
@Table(name = "t_student")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Student implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id; //数据库id
    private String sid; // 学号
    private String name; // 姓名
    private String avatar; // 头像
    private LocalDate enrollDate; // 入学时间
    private Boolean gender; // 性别
    /**
     * 实现一个单向的多对一关系
     * 为什么不需要双向的多对一关系：https://www.yuque.com/feixiangdedonggua/mhfizk/ck2sew#oUJE2
     */
    @ManyToOne
    @JsonIgnoreProperties(value = {"hibernateLazyInitializer"})
    private Major major; // 专业编号
    /**
     * 实现双向的多对多关系：控制方
     * joinColumns 本实体类对应的外键
     * inverseJoinColumns 本实体类控制的另一个实体类的外键
     */
    @ManyToMany
    @JoinTable(name = "t_student_course", joinColumns = {@JoinColumn(name = "student_id")},
        inverseJoinColumns = {@JoinColumn(name = "course_id")})
    private List<Course> courses;
}
